/**
 * 
 */
package com.oolong.account.service;

import java.util.ArrayList;
import java.util.List;

import com.oolong.account.dal.OutitemDAO;
import com.oolong.account.dal.OuttypeDAO;
import com.oolong.account.dal.data.Outitem;
import com.oolong.account.dal.data.Outtype;
import com.oolong.account.model.OutItemModel;
import com.oolong.account.model.OutTypeGroup;
import com.oolong.account.model.OutTypeModel;

/**
 * @author oolong
 * 
 */
public class OutManageImp implements OutManage {
	OutitemDAO outitemDAO;
	OuttypeDAO outtypeDAO;

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.oolong.account.service.OutManageInterface#add(com.oolong.account.
	 * model.OutItem)
	 */
	@Override
	public int add(OutItemModel outItem) {
		Outitem outitemdata = new Outitem();
		outitemdata.setOutGtypeId(outItem.getOutType().getOutTypeGroup()
				.getId());
		outitemdata.setOutTypeId(outItem.getOutType().getId());
		outitemdata.setMemo(outItem.getMemo());
		outitemdata.setMoney(outItem.getMoney());
		outitemdata.setUserId(outItem.getUser().getId());
		int outItemID = outitemDAO.insert(outitemdata);
		return outItemID;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.oolong.account.service.OutManageInterface#delete(long)
	 */
	@Override
	public boolean delete(int id) {
		int result = 0;
		result = outitemDAO.deleteByPrimaryKey(id);
		if (result > 0) {
			return true;
		} else
			return false;

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.oolong.account.service.OutManageInterface#update(com.oolong.account
	 * .model.OutItem)
	 */
	@Override
	public boolean update(OutItemModel outItem) {
		int result = 0;
		Outitem outitemdata = new Outitem();
		outitemdata.setId(outItem.getId());
		outitemdata.setOutGtypeId(outItem.getOutType().getOutTypeGroup()
				.getId());
		outitemdata.setOutTypeId(outItem.getOutType().getId());
		outitemdata.setMemo(outItem.getMemo());
		outitemdata.setMoney(outItem.getMoney());
		// outitemdata.setUserId(outItem.getUser().getId());
		result = outitemDAO.updateByPrimaryKey(outitemdata);
		if (result > 0) {
			return true;
		} else
			return false;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.oolong.account.service.OutManageInterface#query(int)
	 */
	@Override
	public List<OutItemModel> query(int user_id) {
		// 因模型层与DAO层的数据内容不一致，因此需要做转换
		// 定义返回模型层的数据
		List<OutItemModel> outItemModels = new ArrayList();
		// 实际返回DAO层的数据
		List<Outitem> outitems = outitemDAO.selectBynum(user_id);
		// 遍历DAO层的数据，再设置到模型层的数据上
		for (Outitem outitem : outitems) {
			// 定义一个临时的模型层变量
			OutItemModel outItemModel = new OutItemModel();
			// 得到DAO层返回数据，并SET给模型层的数据
			outItemModel.setId(outitem.getId());
			outItemModel.setMemo(outitem.getMemo());
			outItemModel.setDate(outitem.getEditTime());
			outItemModel.setMoney(outitem.getMoney());
			// 对于模型层中，由于包含支出父、子类型，因此还需要做一层转换
			// 返回支出父类型
			OutTypeGroup outTypeGroup = new OutTypeGroup();
			Outtype outtype = outtypeDAO.selectByPrimaryKey(outitem
					.getOutGtypeId());
			outTypeGroup.setId(outtype.getId());
			outTypeGroup.setName(outtype.getName());
			// 返回支出子类型
			OutTypeModel outtypeModel = new OutTypeModel();
			outtype = outtypeDAO.selectByPrimaryKey(outitem.getOutTypeId());
			outtypeModel.setId(outtype.getId());
			outtypeModel.setName(outtype.getName());
			// 将父类型设置给子类型变量
			outtypeModel.setOutTypeGroup(outTypeGroup);
			// 将最终得到的支出类型赋给模型层变量
			outItemModel.setOutType(outtypeModel);
			// 添加到LIST中
			outItemModels.add(outItemModel);
		}
		// 返回LIST
		return outItemModels;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.oolong.account.service.OutManage#querybyID(int)
	 */
	@Override
	public OutItemModel querybyID(int id) {
		// 因模型层与DAO层的数据内容不一致，因此需要做转换
		// 实际返回DAO层的数据
		Outitem outitem = outitemDAO.selectByPrimaryKey(id);
		// 遍历DAO层的数据，再设置到模型层的数据上
		// 定义一个临时的模型层变量
		OutItemModel outItemModel = new OutItemModel();
		if (outitem != null) {
			// 得到DAO层返回数据，并SET给模型层的数据
			outItemModel.setId(outitem.getId());
			outItemModel.setMemo(outitem.getMemo());
			outItemModel.setDate(outitem.getEditTime());
			outItemModel.setMoney(outitem.getMoney());
			// 对于模型层中，由于包含支出父、子类型，因此还需要做一层转换
			// 返回支出父类型
			OutTypeGroup outTypeGroup = new OutTypeGroup();
			Outtype outtype = outtypeDAO.selectByPrimaryKey(outitem
					.getOutGtypeId());
			outTypeGroup.setId(outtype.getId());
			outTypeGroup.setName(outtype.getName());
			// 返回支出子类型
			OutTypeModel outtypeModel = new OutTypeModel();
			outtype = outtypeDAO.selectByPrimaryKey(outitem.getOutTypeId());
			outtypeModel.setId(outtype.getId());
			outtypeModel.setName(outtype.getName());
			// 将父类型设置给子类型变量
			outtypeModel.setOutTypeGroup(outTypeGroup);
			// 将最终得到的支出类型赋给模型层变量
			outItemModel.setOutType(outtypeModel);
		} else {
			return null;
		}
		return outItemModel;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.oolong.account.service.OutManage#querybygroupid(int)
	 */
	@Override
	public List<OutTypeModel> querybygroupid(int groupid) {
		// 因模型层与DAO层的数据内容不一致，因此需要做转换
		// 定义返回模型层的数据
		List<OutTypeModel> outTypeModels = new ArrayList();
		// 实际返回DAO层的数据
		List<Outtype> outtypes = outtypeDAO.selectAllOutSonType(groupid);
		// 遍历DAO层的数据，再设置到模型层的数据上
		for (Outtype outtype : outtypes) {
			// 定义一个临时的模型层变量
			OutTypeModel outTypeModel = new OutTypeModel();
			// 得到DAO层返回数据，并SET给模型层的数据
			outTypeModel.setId(outtype.getId());
			outTypeModel.setName(outtype.getName());
			// 添加到LIST中
			outTypeModels.add(outTypeModel);
		}
		// 返回LIST
		return outTypeModels;
	}

	/**
	 * @param outtypeDAO
	 *            the outtypeDAO to set
	 */
	public void setOuttypeDAO(OuttypeDAO outtypeDAO) {
		this.outtypeDAO = outtypeDAO;
	}

	/**
	 * @param outitemDAO
	 *            the outitemDAO to set
	 */
	public void setOutitemDAO(OutitemDAO outitemDAO) {
		this.outitemDAO = outitemDAO;
	}

}
